On Understanding Types,Data Abstraction, and Polymorphism